/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.webhomesites.padrao.presenter;

import br.com.webhomesites.locacao.presenter.DevolucaoPresenter;
import br.com.webhomesites.locacao.presenter.LocacaoPresenter;
import br.com.webhomesites.padrao.model.BuscarFornecedorModel;
import br.com.webhomesites.padrao.model.FornecedorDAO;
import br.com.webhomesites.padrao.model.FornecedorModel;
import br.com.webhomesites.padrao.presenter.BuscarFornecedorPresenterActionListeners.BuscarActionListener;
import br.com.webhomesites.padrao.presenter.BuscarFornecedorPresenterActionListeners.BuscarFocusListener;
import br.com.webhomesites.padrao.utils.Strategy;
import br.com.webhomesites.padrao.view.BuscarFornecedorView;
import java.text.DecimalFormat;

/**
 *
 * @author Webhome
 */
public class BuscarFornecedorPresenter {

    FornecedorPresenter clientePresenter;
    LocacaoPresenter locacaoPresenter;
    DevolucaoPresenter devolucaoPresenter;
        
    FornecedorModel clienteModel = new FornecedorModel();
    FornecedorDAO clienteDAO = new FornecedorDAO();
    
    BuscarFornecedorView buscarFornecedorView;
    BuscarFornecedorModel buscarFornecedorModel;
       
    public final Strategy BUSCAR_STRATEGY = new BuscarStrategy();
    
    public final Strategy POR_CODIGO_STRATEGY = new CodigoStrategy();
    public final Strategy POR_NOME_STRATEGY = new NomeStrategy();
    public final Strategy POR_CPF_STRATEGY = new CpfStrategy();    
    public final Strategy POR_RG_STRATEGY = new RgStrategy();    
    public final Strategy POR_CNPJ_STRATEGY = new CnpjStrategy();    
    public final Strategy POR_INSCRICAOESTADUAL_STRATEGY = new InscricaoEstadualStrategy();    
    
    public final Strategy BUSCADOR_CLIENTE_VIEW = new FornecedorViewStrategy();
    public final Strategy BUSCADOR_LOCACAO_VIEW = new LocacaoViewStrategy();
            
    private Strategy operacao = BUSCAR_STRATEGY;
    private Strategy tipoBusca;
    private Strategy buscador;
    
    DecimalFormat df = new DecimalFormat("###,###,###.00");
    DecimalFormat df2 = new DecimalFormat("###,###,###.0");
   
    public BuscarFornecedorPresenter(FornecedorPresenter clientePresenter, LocacaoPresenter locacaoPresenter, DevolucaoPresenter devolucaoPresenter, BuscarFornecedorView buscarFornecedorView, BuscarFornecedorModel buscarFornecedorModel) {
        this.clientePresenter = clientePresenter;
        this.locacaoPresenter = locacaoPresenter;
        this.devolucaoPresenter = devolucaoPresenter;
        this.buscarFornecedorModel = buscarFornecedorModel;
        this.buscarFornecedorView = buscarFornecedorView;
               
    }
    
    public BuscarFornecedorPresenter() {
        
    }

    public void setUpViewListeners() {
        buscarFornecedorView.setBtnBuscarActionListener(new BuscarActionListener(this));
        buscarFornecedorView.setCodigoFocusListener(new BuscarFocusListener(this));
        buscarFornecedorView.setNomeFocusListener(new BuscarFocusListener(this));
        buscarFornecedorView.setCpfFocusListener(new BuscarFocusListener(this));
        buscarFornecedorView.setRgFocusListener(new BuscarFocusListener(this));
        buscarFornecedorView.setCnpjFocusListener(new BuscarFocusListener(this));
        buscarFornecedorView.setInscricaoEstadualFocusListener(new BuscarFocusListener(this));

    }

    public void updateModelFromView() {
        buscarFornecedorModel.setCodigo(buscarFornecedorView.getComboCodigo());
        buscarFornecedorModel.setNome(buscarFornecedorView.getComboNome());
        buscarFornecedorModel.setCpf(buscarFornecedorView.getComboCpf());
        buscarFornecedorModel.setRg(buscarFornecedorView.getComboRg());
        buscarFornecedorModel.setCnpj(buscarFornecedorView.getComboCnpj());
        buscarFornecedorModel.setInscricaoEstadual(buscarFornecedorView.getComboInscricaoEstadual());
    }

    public void updateViewFromModel() {
        if (buscarFornecedorModel != null) {
            buscarFornecedorView.setComboCodigo(Long.toString(buscarFornecedorModel.getCodigo()));
            buscarFornecedorView.setComboNome(buscarFornecedorModel.getNome());
            buscarFornecedorView.setComboCpf(buscarFornecedorModel.getCpf());
            buscarFornecedorView.setComboRg(buscarFornecedorModel.getRg());
            buscarFornecedorView.setComboCnpj(buscarFornecedorModel.getCnpj());
            buscarFornecedorView.setComboInscricaoEstadual(buscarFornecedorModel.getInscricaoEstadual());
        } else {
            //buscarFornecedorView.clearFields();
        }
    }

    public void novoBuscarFornecedor() {
        getTipoBusca().execute();
        //buscarFornecedorModel = new DevolucaoTotComPagModel();
        System.out.println("Executando a busca");
        //updateModelLocacaoFromDTCPV();
//        List<UsuarioModel> usuarios = usuarioDAO.findAll();
//        for(UsuarioModel pessoa : usuarios){
//            System.out.println("Pessoa: " + pessoa.getNome());
//        }
//        System.out.println("----------------------------------");
//        usuarios = usuarioDAO.findByNome("hernane");
//        for(UsuarioModel pessoa : usuarios){
//            System.out.println("Pessoa: " + pessoa.getNome());
//        }
    }

    public void habilitarEdicao(boolean arg) {
//        buscarFornecedorView.enableTxtValorTotalLocacao(arg);
//        buscarFornecedorView.enableTxtValorDesconto(arg);
//        buscarFornecedorView.enableTxtValorTotalPagar(arg);
//
//        buscarFornecedorView.enableBtnCancelar(arg);
//        buscarFornecedorView.enableBtnConfirmar(arg);
//        buscarFornecedorView.enableBtnRecibo(arg);
    }
    
    public BuscarFornecedorView getBuscarFornecedorView() {
        return buscarFornecedorView;
    }
    
    public BuscarFornecedorModel getBuscarFornecedorModel() {
        return buscarFornecedorModel;
    }

    public void setBuscarFornecedorView(BuscarFornecedorView buscarFornecedorView) {
        this.buscarFornecedorView = buscarFornecedorView;
    }

    public void setBuscarFornecedorModel(BuscarFornecedorModel buscarFornecedorModel) {
        this.buscarFornecedorModel = buscarFornecedorModel;
    }
    
    public FornecedorPresenter getFornecedorPresenter() {
        return clientePresenter;
    }

    public void createView() {

        this.setUpViewListeners();
        this.habilitarEdicao(true);
        buscarFornecedorView.packAndShow();
    }

    public void setOperacao(Strategy operacao) {
        this.operacao = operacao;
    }

    public Strategy getOperacao() {
        return operacao;
    }

    public Strategy getTipoBusca() {
        return tipoBusca;
    }

    public void setTipoBusca(Strategy tipoBusca) {
        this.tipoBusca = tipoBusca;
    }

    public Strategy getBuscador() {
        return buscador;
    }

    public void setBuscador(Strategy buscador) {
        this.buscador = buscador;
    }   

    private class BuscarStrategy implements Strategy {

        @Override
        public void execute() {            
            novoBuscarFornecedor();
        }
    }
    
    private class CodigoStrategy implements Strategy {

        @Override
        public void execute() {       
            clienteModel = clienteDAO.getById(buscarFornecedorView.getComboCodigo());
            getBuscador().execute();
        }
    }
    
    private class NomeStrategy implements Strategy {

        @Override
        public void execute() {             
            clienteModel = clienteDAO.findByDescricaoUnica(buscarFornecedorView.getComboNome());
            getBuscador().execute();
        }
    }
    
    private class CpfStrategy implements Strategy {

        @Override
        public void execute() {            
            clienteModel = clienteDAO.findByCpf(buscarFornecedorView.getComboCpf());
            getBuscador().execute();
        }
    }
    
    private class RgStrategy implements Strategy {

        @Override
        public void execute() {            
            clienteModel = clienteDAO.findByRg(buscarFornecedorView.getComboRg());
            getBuscador().execute();
        }
    }
    
    private class CnpjStrategy implements Strategy {

        @Override
        public void execute() {            
            clienteModel = clienteDAO.findByCnpj(buscarFornecedorView.getComboCnpj());
            getBuscador().execute();
        }
    }
    
    private class InscricaoEstadualStrategy implements Strategy {

        @Override
        public void execute() {            
            clienteModel = clienteDAO.findByInscricaoEstadual(buscarFornecedorView.getComboInscricaoEstadual());
            getBuscador().execute();
        }
    }
    
    private class FornecedorViewStrategy implements Strategy {

        @Override
        public void execute() {               
            clientePresenter.setOperacao(clientePresenter.UPDATE_STRATEGY);
            clientePresenter.setModel(clienteModel);
            clientePresenter.updateViewFromModel();
        }
    }
    
    private class LocacaoViewStrategy implements Strategy {

        @Override
        public void execute() {            
            FornecedorModel clienteModel = clientePresenter.getDAO().findByCpf(buscarFornecedorView.getComboCpf());
            getBuscador().execute();
        }
    }
    
}
